package org.adoxx.apiclient; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.Date; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.adoxx.basis.read.model.response.AbstractResponse; import org.adoxx.basis.read.model.response.IntegerResponse; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.filter.LoggingFilter; /** * An example client application commmunicating via REST calls to create a new model * */ public class APIModelCreateClient { // endpoint of rest API final static String restAPI = "https://www.adoxx.org/ADOxxWEBAPI/services/rest"; // client for rest interaction final static Client client = ClientBuilder.newClient(new ClientConfig().register(LoggingFilter.class)); // DateFormatter needed for version number final static SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); //PrintStream used for logging final static PrintStream out = System.out; public static void main(String[] args) { System.out.println("######## 1. Create a new modelgroup ########"); // important for this operation is to have a / at the beginning and at // the end int newModelGroupID = createNewModelGroup(out, "/Models/Testing/"); System.out.println("######## 2. Create a new model ########"); int newModelID = createNewBPMNModel(out, newModelGroupID, "Demonstration Model"); System.out.println("######## 3. Create task objects in model ########"); //this list holds all instance names to be created as tasks String[] instance = new String[]{"a", "b", "c", "d", "e", "f"}; //values used for positioning int x=5; int y=10; int offset = 5; int previousObjectID = -1; for (int i = 0; i < instance.length; i++) { String taskName = instance[i]; int newObjectID = createNewTask(System.out, taskName, newModelID); //assume a fixed size for the task object, as this is defined resizeable in the metamodel, a definiton is needed setAttributeValue(out, newObjectID, newModelID, "Position", "NODE x:"+x+"cm y:"+y+"cm w:3.36cm h:1.8cm index:1"); //add offset to x position, horizontal alignment of tasks x = x+offset; //create relation if (previousObjectID != -1) { createSubsequentConnector(out, previousObjectID, newObjectID, newModelID); } previousObjectID = newObjectID; } System.out.println("The graphical representation of the model is accessible at: " + restAPI + "/model/getImage/"+newModelID+"?scale=1.0"); } private static int createNewBPMNModel(PrintStream out, int modelGroupID, String modelname) { // we create a version number dynamically - note that a model is // regarded unique when name + version is unique String version = format.format(new Date()); // the modeltype is hardcoded in this invocation WebTarget webTarget = client.target(restAPI).path("model").path("createModelWithModelgroupID").queryParam("modelgroupid", modelGroupID).queryParam("modelname", modelname).queryParam("modelversion", version).queryParam("modeltype", "Business process diagram (BPMN 2.0)"); Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); Response response = invocationBuilder.post(null); IntegerResponse newModelResponse = response.readEntity(IntegerResponse.class); printResult(out, newModelResponse, response); return newModelResponse.getResult(); } private static int createNewModelGroup(PrintStream out, String modelGroupPath) { WebTarget webTarget = client.target(restAPI).path("modelgroup").path("createModelGroupByPath").queryParam("modelgroupname", "/Models/Testing/"); Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); Response response = invocationBuilder.post(null); IntegerResponse intResponse = response.readEntity(IntegerResponse.class); printResult(out, intResponse, response); return intResponse.getResult(); } private static int createNewTask(PrintStream out, String taskName, int modelid) { WebTarget webTarget = client.target(restAPI).path("instance").path("createInstance").queryParam("modelid", modelid).queryParam("objectname", taskName).queryParam("objectclass", "Task"); Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); Response response = invocationBuilder.post(null); IntegerResponse intResponse = response.readEntity(IntegerResponse.class); printResult(out, intResponse, response); return intResponse.getResult(); } private static int setAttributeValue(PrintStream out, int objectid, int modelid, String attributename, String attributevalue) { WebTarget webTarget = client.target(restAPI).path("instance").path("setAttribute").queryParam("modelid", modelid).queryParam("objectid", objectid).queryParam("attributename", attributename).queryParam("attributevalue", attributevalue); Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); Response response = invocationBuilder.post(null); IntegerResponse intResponse = response.readEntity(IntegerResponse.class); printResult(out, intResponse, response); return intResponse.getResult(); } private static int createSubsequentConnector(PrintStream out, int fromObjID, int toObjID, int modelid) { WebTarget webTarget = client.target(restAPI).path("instance").path("createConnector").queryParam("modelid", modelid).queryParam("fobjectid", fromObjID).queryParam("tobjectid", toObjID).queryParam("connectorclass", "Subsequent"); Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); Response response = invocationBuilder.post(null); IntegerResponse intResponse = response.readEntity(IntegerResponse.class); printResult(out, intResponse, response); return intResponse.getResult(); } private static void printResult(PrintStream out, AbstractResponse response, Response jerseyResponse) { out.println("########################################"); out.println("response code: " + jerseyResponse.getStatus()); out.println("success: " + response.isSuccess()); out.println("ecode: " + response.getEcode()); out.println("ecode: " + response.getErrorText()); out.println("result: " + response.getResult()); out.println("########################################"); } }